SELECT 
    c1,
    FIRST_VALUE(c1) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c1,
    c2,
    FIRST_VALUE(c2) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c2,
    c3,
    FIRST_VALUE(c3) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c3,
    c4,
    FIRST_VALUE(c4) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c4,
    c5,
    FIRST_VALUE(c5) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c5,
    c6,
    FIRST_VALUE(c6) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c6,
    c7,
    FIRST_VALUE(c7) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) as fval_c7,
    c8,
    FIRST_VALUE(c8) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as fval_c8,
    c9,
    FIRST_VALUE(c9) OVER(PARTITION BY c8 ORDER BY c1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as fval_c9
FROM "t_alltype.parquet"
